

package ar.com.arkios.kfconsap.tablas;

import ar.com.arkios.kfconmodelo.modelo.Pallet;
import ar.com.arkios.kfconsap.excepciones.DataTypeInvalidConversionException;
import ar.com.arkios.kfconsap.excepciones.SapGeneralException;
import ar.com.arkios.kfconsap.excepciones.TableNotFoundException;
import ar.com.arkios.kfconsap.util.DateTimeSapTransformer;
import com.sap.mw.jco.JCO;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;

/**
 *
 * @author Ale
 * @version 1.01
 * Estructura SAP NotifDAO
 */
public class NotifDAO extends GenericSAPDAO{
   
    //Atributos
    private static final Logger miLogger = Logger.getLogger(NotifDAO.class);
    
    
    //Constructores
     public NotifDAO(JCO.Function aFunction) throws DataTypeInvalidConversionException, TableNotFoundException {
         super.setMyTableName("ZNOTIF");
         super.setMyTable(aFunction);        
    }

    
     /**
     * Datos de los registros devueltos por la estructura:
     * 
     * CENTRO		WERKS_D	CHAR	4		Centro
     * ALMA		LGORT_D	CHAR	4		Almacén
     * LOTEM		CHARG_D		CHAR	10	Número de lote Monte 
     * FECHA		ZFECHA		CHAR	10	Fecha embalado de caja
     * HORAE		ZZHORA		TIMS	6	Hora
     * EMBAL		ZEMBALADOR	CHAR	8	Cod Embaldor y Nro de Caja
     * CLASI		CHAR8		CHAR	8	CLasificacion
     * EMBA		ZZEMBALAJE	CHAR	8	Condición  embalaje de la fruta
     * PESOR		ZZPESO		DEC	6,2	Peso standard del Envase
     * PESOS		ZPESOENVA	DEC	6,2	Peso del Pallet..
     * ORDEC		AUFNR		CHAR	12	Número de orden Cajas
     * ORDEP		AUFNR		CHAR	12	Número de orden Pallet
     * TAMBOR		ZTAMBOR		CHAR	8 	Cod. Tambor
     * CALIB		ZCALIBRES	CHAR	9	Calibre   posición 9 posiciones
     * ENCER		ZZENCERADO	CHAR	2	Si está encerado o no
     * CONTR		ZZCONTRAMA	CHAR	15	Contramarca de la fruta
     * ATMO		ZZATMOSF	CHAR	2	Atmosfera controlada o natural
     * LOTEP		CHARG_D		CHAR	10	Número de lote
     * IDCOM_PAL	ZIDCOMERCIAL	CHAR	8	Id comercial
     * LOTEC		CHARG_D		CHAR	10	Número de lote
     * ESTADO		SELKZ		CHAR	1	Indicador de Agrupador
     * IDCOM_CAJ	ZIDCOMERCIAL	CHAR	8	Id comercial
     * CANTI		ERFMG		QUAN	13,3	Cant. und de medida de entrada
     * SENASA		ZSENASA		CHAR	3	Nro para senasa
     * ZUMI		ZUMI		CHAR	15	Valor Umi para lotes por kilo
     * POSID		CHAR10		CHAR	10	Campo de texto, longitud 10
     * ACTIVE		SELKZ		CHAR	1	Indicador de selección
     * EUREPGAP	ZEUREPGAP	CHAR	25	Código Eurepgap
     * ZCALIBRADORA	ZCALIBRADORA	CHAR	50	Nombre de la calibradora
     */
   


    @Override
    public void findAll() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    /**
     * Solo para las pruebas
     */
    @Override
    public void printAll() {
        System.out.println("CENTRO"+'\t'+"ALMA"+'\t'+"LOTEM"+'\t'+"FECHA"+'\t'+"HORAE"+'\t'+"EMBAL"+'\t'+"CLASI"+'\t'+"EMBA"+'\t'+"PESOR"+'\t'+"PESOS"+'\t'+"ORDEC"+'\t'+"ORDEP"+'\t'+"TAMBOR"+'\t'+"CALIB"+'\t'+"ENCER"+'\t'+"CONTR"+'\t'+"ATMO"+'\t'+"LOTEP"+'\t'+"IDCOM_PAL"+'\t'+"LOTEC"+'\t'+"ESTADO"+'\t'+"IDCOM_CAJ"+'\t'+"CANTI"+'\t'+"SENASA"+'\t'+"ZUMI"+'\t'+"POSID"+'\t'+"ACTIVE"+'\t'+"EUREPGAP"+'\t'+"ZCALIBRADORA");
        for (int i = 0; i < super.getMyTable().getNumRows(); i++){
            super.getMyTable().setRow(i);            
            System.out.println(super.getMyTable().getString("CENTRO")  +
            '\t' + super.getMyTable().getString("ALMA") +
            '\t' + super.getMyTable().getString("LOTEM") +
            '\t' + super.getMyTable().getString("FECHA") +
            '\t' + super.getMyTable().getString("HORAE") +
            '\t' + super.getMyTable().getString("EMBAL") +
            '\t' + super.getMyTable().getString("CLASI") +
            '\t' + super.getMyTable().getString("EMBA") +
            '\t' + super.getMyTable().getString("PESOR") +
            '\t' + super.getMyTable().getString("PESOS") +
            '\t' + super.getMyTable().getString("ORDEC") +
            '\t' + super.getMyTable().getString("ORDEP") +
            '\t' + super.getMyTable().getString("TAMBOR") +
            '\t' + super.getMyTable().getString("CALIB") +
            '\t' + super.getMyTable().getString("ENCER") +
            '\t' + super.getMyTable().getString("CONTR") +
            '\t' + super.getMyTable().getString("ATMO") +
            '\t' + super.getMyTable().getString("LOTEP") +
            '\t' + super.getMyTable().getString("IDCOM_CAJ") +
            '\t' + super.getMyTable().getString("LOTEC") +
            '\t' + super.getMyTable().getString("ESTADO") +
            '\t' + super.getMyTable().getString("IDCOM_CAJ") +
            '\t' + super.getMyTable().getString("CANTI") +
            '\t' + super.getMyTable().getString("SENASA") +
            '\t' + super.getMyTable().getString("ZUMI") +
            '\t' + super.getMyTable().getString("POSID") +
            '\t' + super.getMyTable().getString("ACTIVE") +
            '\t' + super.getMyTable().getString("EUREPGAP") +
            '\t' + super.getMyTable().getString("ZCALIBRADORA")
            );                
        }        
        
    }
    
    /**
     * 
     * @param aList
     * Recibe una Lista 
     */
    
    public void insert(List<Pallet> aList) throws SapGeneralException{
        Iterator it = aList.iterator();
        Pallet unPallet;        
        while(it.hasNext()){            
            unPallet = (Pallet) it.next();            
            try {
                this.insert(unPallet);
            } catch (DataTypeInvalidConversionException ex) {                
                throw new SapGeneralException(ex.getMessage());
            }
        }
    }

    /**
     * 
     * @param unPallet
     * Recibe un Pallet
     */
    public void insert(Pallet unPallet) throws DataTypeInvalidConversionException{            
            
            GregorianCalendar unCalendar = new GregorianCalendar();
            unCalendar.setTime(unPallet.getMiFechaYHoraEmbalado());
            super.getMyTable().appendRow();
            try{
                //super.getMyTable().setRow(super.getMyTable().getNumRows()-1);
                super.getMyTable().setValue(unPallet.getMiCentroCod().toUpperCase(),"CENTRO");
                //miLogger.info("CENTRO: " + unPallet.getMiCentroCod().toUpperCase());
                //System.out.println("CENTRO" + ": "+unPallet.getMiCentroCod().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiAlmacenCod().toUpperCase(), "ALMA");
                //miLogger.info("ALMA: " + unPallet.getMiAlmacenCod().toUpperCase());
                //System.out.println("ALMA" + ": "+unPallet.getMiAlmacenCod().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiLoteMonte().toUpperCase(), "LOTEM");
                //miLogger.info("LOTEM: " + unPallet.getMiLoteMonte().toUpperCase());
                //System.out.println("LOTEM" + ": "+unPallet.getMiLoteMonte().toUpperCase());
                super.getMyTable().setValue(DateTimeSapTransformer.getDate(unCalendar) , "FECHA");
                //miLogger.info("FECHA: " + DateTimeSapTransformer.getDate(unCalendar));//////////////////////////
                //System.out.println("FECHA" + ": "+DateTimeSapTransformer.getDate(unCalendar));
                //super.getMyTable().setValue(unPallet.getMiFechaYHoraEmbalado(), "HORAE");// La hora No se envia
                super.getMyTable().setValue(unPallet.getMiEmbaladorCod().toUpperCase(),"EMBAL");
                //miLogger.info("EMBAL: " + unPallet.getMiEmbaladorCod().toUpperCase());
                //System.out.println("EMBAL" + ": "+unPallet.getMiEmbaladorCod().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiClasificacion().toUpperCase(), "CLASI");
                //miLogger.info("CLASI: " + unPallet.getMiClasificacion().toUpperCase());
                //System.out.println("CLASI" + ": "+unPallet.getMiClasificacion().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiEmbalaje().toUpperCase(), "EMBA");
                //miLogger.info("EMBA: " + unPallet.getMiEmbalaje().toUpperCase());
                //System.out.println("EMBA" + ": "+unPallet.getMiEmbalaje().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiPesoEstandar(), "PESOR");
                //miLogger.info("PESOR: " + unPallet.getMiPesoEstandar());
                //System.out.println("PESOR" + ": "+unPallet.getMiPesoEstandar());
                super.getMyTable().setValue(unPallet.getMiPesoPallet(), "PESOS");
                //miLogger.info("PESOS: " + unPallet.getMiPesoPallet());
                //System.out.println("PESOS" + ": "+unPallet.getMiPesoPallet());
                super.getMyTable().setValue(unPallet.getMiOrdenCajasCod().toUpperCase(), "ORDEC");
                //miLogger.info("ORDEC: " + unPallet.getMiOrdenCajasCod().toUpperCase());
                //System.out.println("ORDEC" + ": "+unPallet.getMiOrdenCajasCod().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiOrdenPalletCod(), "ORDEP");
                //miLogger.info("ORDEP: " + unPallet.getMiOrdenPalletCod().toUpperCase());
                //System.out.println("ORDEP" + ": "+unPallet.getMiOrdenPalletCod());
                super.getMyTable().setValue(unPallet.getMiCodigoTambor().toUpperCase(), "TAMBOR");
                //miLogger.info("TAMBOR: " + unPallet.getMiCodigoTambor().toUpperCase());
                //System.out.println("TAMBOR" + ": "+unPallet.getMiCodigoTambor().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiCalibreCod().toUpperCase(), "CALIB");
                //miLogger.info("CALIB: " + unPallet.getMiCalibreCod().toUpperCase());
                //System.out.println("CALIB" + ": "+unPallet.getMiCalibreCod().toUpperCase());
                super.getMyTable().setValue(unPallet.getEstaEncerrado().toUpperCase(), "ENCER");
                //miLogger.info("ENCER: " + unPallet.getEstaEncerrado().toUpperCase());
                //System.out.println("ENCER" + ": "+unPallet.getEstaEncerrado().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiContramarca().toUpperCase(), "CONTR");
                //miLogger.info("CONTR: " + unPallet.getMiContramarca().toUpperCase());
                //System.out.println("CONTR" + ": "+unPallet.getMiContramarca().toUpperCase());
                super.getMyTable().setValue(unPallet.getAtmosferaControlada().toUpperCase(),"ATMO");
                //miLogger.info("ATMO: " + unPallet.getAtmosferaControlada().toUpperCase());
                //System.out.println("ATMO" + ": "+unPallet.getAtmosferaControlada().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiNumeroLotePallet().toUpperCase(), "LOTEP");
                //miLogger.info("LOTEP: " + unPallet.getMiNumeroLotePallet().toUpperCase());
                //System.out.println("LOTEP" + ": "+unPallet.getMiNumeroLotePallet().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiIdComercialPallet().toUpperCase(), "IDCOM_PAL");
                //miLogger.info("IDCOM_PAL: " + unPallet.getMiIdComercialPallet().toUpperCase());
                //System.out.println("IDCOM_PAL" + ": "+unPallet.getMiIdComercialPallet().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiNumeroLoteCaja().toUpperCase(), "LOTEC");
                //miLogger.info("LOTEC: " + unPallet.getMiNumeroLoteCaja().toUpperCase());
                //System.out.println("LOTEC" + ": "+unPallet.getMiNumeroLoteCaja().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiEstado(), "ESTADO");
                //miLogger.info("ESTADO: " + unPallet.getMiEstado());
                //System.out.println("ESTADO" + ": "+unPallet.getMiEstado());
                super.getMyTable().setValue(unPallet.getMiIdComercialCaja().toUpperCase(), "IDCOM_CAJ");
                //miLogger.info("IDCOM_CAJ: " + unPallet.getMiIdComercialCaja().toUpperCase());
                //System.out.println("IDCOM_CAJ" + ": "+unPallet.getMiIdComercialCaja().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiCantidadUnidadMedida(), "CANTI");
                //miLogger.info("CANTI: " + unPallet.getMiCantidadUnidadMedida());
                //System.out.println("CANTI" + ": "+unPallet.getMiCantidadUnidadMedida());
                super.getMyTable().setValue(unPallet.getMiSenasaCod().toUpperCase(), "SENASA");
                //miLogger.info("SENASA: " + unPallet.getMiSenasaCod().toUpperCase());
                //System.out.println("SENASA" + ": "+unPallet.getMiSenasaCod().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiUmi().toUpperCase(), "ZUMI");
                //miLogger.info("ZUMI: " + unPallet.getMiUmi().toUpperCase());
                //System.out.println("ZUMI" + ": "+unPallet.getMiUmi().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiPosId().toUpperCase(), "POSID");
                //miLogger.info("POSID: " + unPallet.getMiPosId().toUpperCase());
                //System.out.println("POSID" + ": "+unPallet.getMiPosId().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiIndicadorSeleccion(), "ACTIVE");
                //miLogger.info("ACTIVE: " + unPallet.getMiIndicadorSeleccion());
                //System.out.println("ACTIVE" + ": "+unPallet.getMiIndicadorSeleccion());
                super.getMyTable().setValue(unPallet.getMiEurepGapCod().toUpperCase(), "EUREPGAP");
                //miLogger.info("EUREPGAP: " + unPallet.getMiEurepGapCod().toUpperCase());
                //System.out.println("EUREPGAP" + ": "+unPallet.getMiEurepGapCod().toUpperCase());
                super.getMyTable().setValue(unPallet.getMiCalibradoraNombre().toUpperCase(), "ZCALIBRADORA");
                //miLogger.info("ZCALIBRADORA: " + unPallet.getMiCalibradoraNombre().toUpperCase());
                //miLogger.info("   --- ---   ---   ---   fin linea ---   ---   ---   ---   ---   ");
                //System.out.println("ZCALIBRADORA" + ": "+unPallet.getMiCalibradoraNombre().toUpperCase());

            }catch(JCO.ConversionException ex){                
                throw new DataTypeInvalidConversionException(ex.getMessage());
            }

            
        
    }
    public void printAll(List<Pallet> aList){
        Iterator it = aList.iterator();
        Pallet unPallet;        
        while(it.hasNext()){            
            unPallet = (Pallet) it.next();
            System.out.println("----------------------------");
            System.out.println("-------NUEVO PALLET---------");
            System.out.println("Atmosfera Controlada:"+unPallet.getAtmosferaControlada());
            System.out.println("Encerado: "+unPallet.getEstaEncerrado());
            System.out.println("Almacen: "+unPallet.getMiAlmacenCod());
            System.out.println("Nombre Calibradora: "+unPallet.getMiCalibradoraNombre());
            System.out.println("Codigo Calibre: "+unPallet.getMiCalibreCod());
            System.out.println("Cantidad Unidad Medida: "+unPallet.getMiCantidadUnidadMedida());
            System.out.println("Centro: "+unPallet.getMiCentroCod());
            System.out.println("Clasificacion: "+unPallet.getMiClasificacion());
            System.out.println("Tambor: "+unPallet.getMiCodigoTambor());
            System.out.println("Contramarca: "+unPallet.getMiContramarca());
            System.out.println("Embalador Codigo: "+unPallet.getMiEmbaladorCod());
            System.out.println("Embalaje: "+unPallet.getMiEmbalaje());
            System.out.println("Estado: "+unPallet.getMiEstado());
            System.out.println("Euregap: "+unPallet.getMiEurepGapCod());
            System.out.println("ID Comercial Caja: "+unPallet.getMiIdComercialCaja());
            System.out.println("ID Comercial Pallet: "+unPallet.getMiIdComercialPallet());
            System.out.println("Lote Monte: "+unPallet.getMiLoteMonte());
            System.out.println("Lote Caja: "+unPallet.getMiNumeroLoteCaja());
            System.out.println("Lote Pallet: "+unPallet.getMiNumeroLotePallet());
            System.out.println("Orden Cajas: "+unPallet.getMiOrdenCajasCod());
            System.out.println("Orden Pallet: "+unPallet.getMiOrdenPalletCod());
            System.out.println("POS ID: "+unPallet.getMiPosId());
            System.out.println("Código Senasa: "+unPallet.getMiSenasaCod());
            System.out.println("UMI: "+unPallet.getMiUmi());
            
            
        }
        
        
    }
}
